﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Text;
using System.IO;


public partial class Admin_Quanlydonvi_NN : System.Web.UI.Page
{
    private string file_save_name = "";
    private string path_save = "";
      //lưu giữ địa chỉ email khi load sửa chữa thông tin cơ quan nhà nước:dùng để so sánh nếu có sự thay đổi email thì gửi lại
    //email xác nhận thông báo cho đơn vị đó
    private string email_current = "";
    BieumauDataContext db = new BieumauDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["login_admin"] == null)
        {
            Response.Redirect("Index.aspx");
        }
        if (!IsPostBack)
        {
            fill_data(_grid_coquannhanuoc);
            load_capnhat_dn();
        }


    }
    protected void _grid_coquannhanuoc_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        _grid_coquannhanuoc.PageIndex = e.NewPageIndex;
        fill_data(_grid_coquannhanuoc);

    }
    public void fill_data(GridView gridview)
    {

        var i = from p in db.tblCoQuanNhaNuocs orderby p.MaCoQuan descending select p;
        gridview.DataSource = i;
        gridview.DataBind();
    }
    public void delete_row(string id)
    {

        var d = (from p in db.tblCoQuanNhaNuocs where p.MaCoQuan.Contains(id) select p).Single();
        db.tblCoQuanNhaNuocs.DeleteOnSubmit(d);
        db.SubmitChanges();


    }
    /// <summary>
    /// hàm xóa công sở
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btn_xoa_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in _grid_coquannhanuoc.Rows)
        {
            CheckBox checkbox = (CheckBox)row.FindControl("chkBxSelect");

            //Nếu bản ghi được chọn thì thực hiện xóa
            if (checkbox.Checked)
            {
                string idmuc =_grid_coquannhanuoc.DataKeys[row.RowIndex].Value.ToString();
                delete_row(idmuc);
                

            }
        }
        fill_data(_grid_coquannhanuoc);
    }
    /// <summary>
    /// xóa 1 dòng trên gridview
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void _grid_coquannhanuoc_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string idmuc = _grid_coquannhanuoc.Rows[e.RowIndex].Cells[1].Text;
        delete_row(idmuc);
        fill_data(_grid_coquannhanuoc);
        
    }
  
    public void xoathongtin()
    {
        txtemail_nn.Text = "";
        txtmota_nn.Text = "";
        txtsdt_nn.Text = "";
        txttencoquan.Text = "";
        txtwebsite_nn.Text = "";
        txttengiaodich_nn.Text = "";
        txtdiachi_nn.Text = "";
        txttencoquan.Focus();
    }
    /// <summary>
    /// Hàm sau đây sẽ tạo mã ngẫu nhiên chỉ gồm các chữ số
    /// </summary>
    /// <param name="codeCount">độ dài chuỗi random</param>
    /// <returns>chuỗi random</returns>
    public string MaNgauNhien_So(int codeCount)
    {
        string allChar = "0,1,2,3,4,5,6,7,8,9";
        string[] allCharArray = allChar.Split(',');
        string randomCode = "";
        int temp = -1;
        Random rand = new Random();
        for (int i = 0; i < codeCount; i++)
        {
            if (temp != -1)
            {
                rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
            }
            int t = rand.Next(10);
            if (temp != -1 && temp == t)
            {
                return MaNgauNhien_So(codeCount);
            }
            temp = t;
            randomCode += allCharArray[t];
        }
        return randomCode;
    }
     

    /// <summary>
    /// Hàm này trả về chuỗi Password ngẫu nhiên [a-z], [0-9]
    /// </summary>
    /// <param name="PasswordLength">độ dài mật khẩu</param>
    /// <returns>mật khẩu</returns>
        public static string Gen_pass(int PasswordLength)
    {
	        string _allowedChars = "abcdefghijkmnopqrstuvwxyz0123456789";
        Random randNum = new Random();
	        char[] chars = new char[PasswordLength];
        int allowedCharCount = _allowedChars.Length;
	        for (int i = 0; i < PasswordLength; i++)
	        {
	            chars[i] = _allowedChars[(int)((_allowedChars.Length) * randNum.NextDouble())];
	        }
	        return new string(chars);
	 }
    /// <summary>
    /// hàm tạo MaCoQuan
    /// </summary>
    /// <returns>macoquan:không trùng nhau</returns>
    public string Gen_ID_NN()
    {
        
        string macoquan = "";
        string machuoi=MaNgauNhien_So(3)+MaNgauNhien_So(3);
        return macoquan = "NN"+machuoi;
        
       
    }
    /// <summary>
    /// hàm upload file
    /// </summary>
    /// <param name="domain_name"></param>
    /// <param name="save_path"></param>
    /// <param name="file_upload"></param>
    public void hamupload_file(string domain_name, string save_path, FileUpload file_upload)
    {

        //khai báo lấy tên tập tin
        if (file_upload.HasFile)
        {
            //mảng chứa tên file cần lọc lấy
            string[] validFileTypes = { "PNG", "png", "jpg", "JPG", "GIF", "gif" };
            string ext = System.IO.Path.GetExtension(file_upload.PostedFile.FileName);
            bool isValidFile = false;
            for (int i = 0; i < validFileTypes.Length; i++)
            {
                if (ext == "." + validFileTypes[i])
                {
                    isValidFile = true;
                    break;
                }
            }
            if (!isValidFile)
            {
                lbllabel.ForeColor = System.Drawing.Color.Red;
                lbllabel.Text = "Sai định dạng ảnh,hãy chọn file có phần mở rộng như sau:" +
                string.Join(",", validFileTypes);
            }
            else
            {
                string new_random = MaNgauNhien_So(10);
                string file_name = file_upload.FileName;
                file_name = new_random + "_" + txttencoquan.Text + "_" + ext;
                file_save_name = file_name;
                save_path += file_name;
                path_save = save_path;
                //HttpPostedFile file = file_upload.PostedFile;
                //file_upload.SaveAs(save_path);
                //thay thế phương thức:HttpPostedFile file = file_upload.PostedFile;= Stream filenguon = file_upload.PostedFile.InputStream;
                Stream filenguon = file_upload.PostedFile.InputStream;
                //nén ảnh tỉ lệ 1/2 ảnh gốc
                //Resize_image.Set_Image(0.5, filenguon, save_path);
                //nén ảnh theo kích thước tùy ý
                Resize_image.Set_Image(110,80,filenguon, save_path);
                //file_upload.SaveAs(save_path);
            }


        }
    }


    /// <summary>
    /// đăng kí doanh nghiệp
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btndangky_nn_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
           string _user="";
           string _pass="";
           string _tenhienthi="";
            string _noidung="";
            string _chude="";
           var email = from p in db.Mail_systems select new { user = p.Mail, pass = p.Pass,chude=p.Chude,Noidung=p.Noidung,Tenhienthi=p.Tenhienthi };
            foreach(var ime in email)
            {
                _user=ime.user;
                _pass=ime.pass;
                _tenhienthi=ime.Tenhienthi;
                _noidung=ime.Noidung;
                _chude=ime.chude;

            
            }
            tblCoQuanNhaNuoc coquan = new tblCoQuanNhaNuoc();
            if (file_logo_nn.HasFile)
            {
                string save_path = Server.MapPath("~/userfiles/logo/");
                
                hamupload_file("", save_path, file_logo_nn);
            }
           
            string matkhau_guimail = Gen_pass(8);
            string matkhau_luu = matkhau_guimail.Trim().MD5_pass_kieu1();
            string macoquan = Gen_ID_NN();
            coquan.MaCoQuan = macoquan;
            coquan.MatKhau = matkhau_luu ;
            if (File.Exists(path_save))
            {
                coquan.Logo = "userfiles/logo/" + file_save_name;
            }
            else
            {
                lbllabel.ForeColor = System.Drawing.Color.Red;
                lbllabel.Text = "Không thể load hình,xin thử lại";
            }
            coquan.TenCoQuan = txttencoquan.Text;
            coquan.TenGiaoDich = txttengiaodich_nn.Text;
            coquan.SDT = txtsdt_nn.Text;
            coquan.email = txtemail_nn.Text;
            coquan.DiaChi = txtdiachi_nn.Text;
            coquan.Website = txtwebsite_nn.Text;
            coquan.MoTaSoLuoc = txtmota_nn.Text;
            coquan.MatKhauReset = matkhau_guimail.Trim();   
            db.tblCoQuanNhaNuocs.InsertOnSubmit(coquan);
            db.SubmitChanges();
            _noidung+="<br/><p>Thông tin của đơn vị đã được đăng kí thành công trên hệ thống<br/>"+
                "Sau khi đăng nhập thành công bạn có thể đổi mật khẩu:</p><br/><b>Tài khoản:</b> "+macoquan+"<br/><b>Mật khẩu:</b> "+ matkhau_guimail+"<br/><br/>Trân trọng,<br/>Quản trị website";
            Send_mail.Send(_user.Trim(), txtemail_nn.Text.Trim(), _chude,_noidung, _pass.Trim(), _tenhienthi);
            fill_data(_grid_coquannhanuoc);
            xoathongtin();
            Response.Redirect(Request.Url.AbsolutePath);
        }
    }
    /// <summary>
    /// Check email có thay đổi khi cập nhật hay không?
    /// </summary>
    /// <param name="email_old">email đã đăng kí trước đó</param>
    /// <param name="email_new">email khi cập nhật</param>
    /// <returns></returns>
    public string check_mail(string email_old, string email_new)
    {
        string _user = "";
        string _pass = "";
        string _tenhienthi = "";
        string _noidung = "";
        string _chude = "";
        var email = from p in db.Mail_systems select new { user = p.Mail, pass = p.Pass, chude = p.Chude, Noidung = p.Noidung, Tenhienthi = p.Tenhienthi };
        foreach (var ime in email)
        {
            _user = ime.user;
            _pass = ime.pass;
            _tenhienthi = ime.Tenhienthi;
            _noidung = ime.Noidung;
            _chude = "Thống kê KHCN : Thông báo về việc thay đổi địa chỉ Email";
        }
        if (!email_old.Trim().Equals(email_new.Trim()))
        {
            _noidung += "<br/><p>Đáp ứng theo yêu cầu của quý đơn vị,địa chỉ email của đơn vị bạn vừa được cập nhật. Mọi thông tin và yêu cầu sẽ được giao dịch qua địa chỉ email: "+txtemail_nn.Text.Trim()+" kể từ lúc này.</p><br/>Xin cảm ơn<br/>Trân trọng,<br/>Quản trị website";
            Send_mail.Send(_user.Trim(), email_new.Trim(), _chude, _noidung, _pass.Trim(), _tenhienthi);
        }
        return email_new;
    }
    /// <summary>
    /// cập nhật lại thông tin cơ quan nhà nước
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btndangky_nn_capnhat(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {

            string nn = Request.QueryString["idnn"];
            tblCoQuanNhaNuoc coquan = db.tblCoQuanNhaNuocs.Single(p => p.MaCoQuan == nn);
            //nếu thay đổi logo
            if (file_logo_nn.HasFile)
            {
                string save_path = Server.MapPath("~/userfiles/logo/");
                hamupload_file("", save_path, file_logo_nn);
                //nếu như logo đã được thay dổi thành công thì mới update
            if (File.Exists(path_save))
            {
                coquan.Logo = "userfiles/logo/" + file_save_name;
                coquan.TenCoQuan = txttencoquan.Text;
                coquan.TenGiaoDich = txttengiaodich_nn.Text;
                coquan.SDT = txtsdt_nn.Text;
                string email_change = check_mail(email_current, txtemail_nn.Text.Trim());
                coquan.email = email_change;
                coquan.DiaChi = txtdiachi_nn.Text;
                coquan.Website = txtwebsite_nn.Text;
                coquan.MoTaSoLuoc = txtmota_nn.Text;
                db.SubmitChanges();
                fill_data(_grid_coquannhanuoc);
                xoathongtin();
            }
            else
            {
                lbllabel.ForeColor = System.Drawing.Color.Red;
                lbllabel.Text = "Không thể load hình,xin thử lại";
            }
            }
            //nếu ko thay đổi logo
            else
                {

                    coquan.TenCoQuan = txttencoquan.Text;
                    coquan.TenGiaoDich = txttengiaodich_nn.Text;
                    coquan.SDT = txtsdt_nn.Text;
                    string email_change = check_mail(email_current, txtemail_nn.Text.Trim());
                    coquan.email = email_change;
                    coquan.DiaChi = txtdiachi_nn.Text;
                    coquan.Website = txtwebsite_nn.Text;
                    coquan.MoTaSoLuoc = txtmota_nn.Text;
                    db.SubmitChanges();
                    fill_data(_grid_coquannhanuoc);
                    xoathongtin();
                }
        }
    }
 
     /// <summary>
    /// Hàm load dữ liệu cơ quan nhà nước khi cập nhât
    /// </summary>
    public void load_capnhat_dn()
    {
        if (Request.QueryString["idnn"] != null)
        {

            string dn = Request.QueryString["idnn"];
            tblCoQuanNhaNuoc ttdn = db.tblCoQuanNhaNuocs.Single(p => p.MaCoQuan == dn);
            txttencoquan.Text = ttdn.TenCoQuan;
            txttengiaodich_nn.Text = ttdn.TenGiaoDich;
            txtsdt_nn.Text = ttdn.SDT;
            txtemail_nn.Text = ttdn.email;
            email_current = ttdn.email.Trim();
            txtdiachi_nn.Text = ttdn.DiaChi;
            txtwebsite_nn.Text = ttdn.Website;
            txtmota_nn.Text = ttdn.MoTaSoLuoc;

        }
       
    }
    
    
}